use std::env;
use std::time::Duration;
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
use tracing::log;

/// sea_orm 官方网站： https://www.sea-ql.org/SeaORM/docs/install-and-config/connection/  此处为连接配置
// 初始化数据库连接池
pub async fn init_db() -> DatabaseConnection {
    /// 此处部分配置参考 sea_orm 官方示例： https://github.com/SeaQL/sea-orm/blob/master/examples/axum_example/api/src/lib.rs
    // 设置日志级别
    env::set_var("RUST_LOG", "debug");
    tracing_subscriber::fmt::init();

    // 加载 .env 文件配置到环境变量，然后我们就可以通过标准库的 env 来获取环境变量
    dotenvy::dotenv().ok();
    let db_url = env::var("DATABASE_URL").expect("DATABASE_URL is not set in .env file");

    // 通过数据库连接地址创建连接池配置对象
    let mut opt = ConnectOptions::new(db_url);

    // 配置连接池参数
    opt.max_connections(100)
        .min_connections(5)
        .connect_timeout(Duration::from_secs(8))
        .acquire_timeout(Duration::from_secs(8))
        .idle_timeout(Duration::from_secs(8))
        .max_lifetime(Duration::from_secs(8))
        // 是否打印SQL执行日志
        .sqlx_logging(true)
        // 如果开启SQL日志、对应设置SQL日志级别
        .sqlx_logging_level(log::LevelFilter::Info)
        // 设置默认连接的数据库
        .set_schema_search_path("blog_cloud");

    // 开始连接数据库
    let db = Database::connect(opt).await?;

    return db;
}

